
// pages/face/face.js
import mqtt from "../../utils/mqtt.min";

Page({
  data: {
    client: null,
    host: "sc96bd0a.ala.cn-hangzhou.emqxsl.cn",
    subTopic: "/facerecognition",
    pubTopic: "/facerecognition",
    mqttOptions: {
      username: "lm",
      password: "12345678",
      reconnectPeriod: 1000, // 1000毫秒，设置为 0 禁用自动重连
      connectTimeout: 30 * 1000, // 30秒，连接超时时间
    },
    name:""
  },
//获取名字
name(e) {
  // 获取输入的名字并存储到 data 中
  this.setData({
    name: e.detail.value
  });
},
  setValue(key, value) {
    this.setData({
      [key]: value,
    });
  },

  uploadFace() {
    // 连接到 MQTT 服务器
    this.connect().then(() => {
      // 订阅主题
      this.subscribe().then(() => {
        // 上传照片并发布到 MQTT 主题
        this.uploadAndPublish();
      });
    });
  },

  connect() {
    return new Promise((resolve, reject) => {
      if (this.data.client) {
        resolve(true);
        return;
      }
      try {
        const clientId = new Date().getTime();
        this.data.client = mqtt.connect(`wxs://${this.data.host}:8084/mqtt`, {
          ...this.data.mqttOptions,
          clientId,
        });

        this.data.client.on("connect", () => {
          // wx.showToast({
          //   title: "连接成功",
          // });
          resolve(true);
        });

        this.data.client.on("error", (error) => {
          console.error("连接失败", error);
          wx.showToast({
            title: '连接失败',
            icon: 'none',
          });
          reject(error);
        });
      } catch (error) {
        console.error("连接失败", error);
        wx.showToast({
          title: '连接失败',
          icon: 'none',
        });
        reject(error);
      }
    });
  },

  subscribe() {
    return new Promise((resolve, reject) => {
      if (!this.data.client) {
        reject(new Error("未连接到 MQTT 服务器"));
        return;
      }
      this.data.client.subscribe(this.data.subTopic, (err) => {
        if (err) {
          console.error("订阅失败", err);
          wx.showToast({
            title: '订阅失败',
            icon: 'none',
          });
          reject(err);
        } else {
          // wx.showToast({
          //   title: `成功订阅主题：${this.data.subTopic}`,
          // });
          resolve(true);
        }
      });
    });
  },

//   uploadAndPublish() {
//     wx.chooseImage({
//       count: 1,
//       sizeType: ['original', 'compressed'],
//       sourceType: ['album', 'camera'],
//       success: (res) => {
//         const tempFilePaths = res.tempFilePaths;
//         const tempFilePath = tempFilePaths[0];

//         // 构造云存储的路径
//         const cloudPath = `uploads/${Date.now()}-${Math.random().toString(36).substr(2, 6)}.jpg`;

//         // 直接上传到云存储，并设置为公有读权限
//         wx.cloud.uploadFile({
//           cloudPath: cloudPath, // 云存储路径
//           filePath: tempFilePath, // 本地临时路径
//           meta: {
//             "public": true // 设置为公有读
//           },
//           success: (uploadRes) => {
//             console.log('上传结果：', uploadRes);
//             if (uploadRes.fileID) {
//               // 获取永久 URL
//               const fileURL = `photo,${uploadRes.fileID},wzc`; // 在 URL 前加上 "photo,"（注意逗号）
//               console.log('图片永久 URL：', fileURL);
         
// // // 将 URL 包装成 JSON 格式
// // const message = {
// //    fileURL
// // };
// // const jsonString = JSON.stringify(message);



//               // 发布到 MQTT 主题
//               this.data.client.publish(this.data.pubTopic, fileURL, {
//                 qos: 1, // 可选：设置 QoS 级别
//                 retain: false // 可选：设置是否保留消息
//               });

//               wx.showToast({
//                 title: '上传成功并已发布到 MQTT 主题',
//                 icon: 'success',
//                 duration: 2000
//               });
//             } else {
//               wx.showToast({
//                 title: '上传失败',
//                 icon: 'none',
//                 duration: 2000
//               });
//             }
//           },
//           fail: (err) => {
//             console.error('上传失败：', err);
//             wx.showToast({
//               title: '上传失败',
//               icon: 'none',
//               duration: 2000
//             });
//           }
//         });
//       }
//     });
//   },

uploadAndPublish() {
  wx.chooseImage({
    count: 1,
    sizeType: ['original', 'compressed'],
    sourceType: ['album', 'camera'],
    success: (res) => {
      const tempFilePath = res.tempFilePaths[0];
      const cloudPath = `uploads/${Date.now()}-${Math.random().toString(36).substr(2, 6)}.jpg`;

      // 上传到云存储
      wx.cloud.uploadFile({
        cloudPath,
        filePath: tempFilePath,
        success: (uploadRes) => {
          console.log('上传成功', uploadRes);

          // 获取文件的 HTTP 访问链接
          wx.cloud.getTempFileURL({
            fileList: [uploadRes.fileID],
            success: (res) => {
              const fileURL = res.fileList[0].tempFileURL; // 这里就是 HTTP/HTTPS 链接
              console.log('文件 HTTP 链接:', fileURL);
// const url=`photo,${fileURL},wzc`
// 使用输入的名字替换 "wzc"
const name = this.data.name || "未命名";
const url = `photo,${fileURL},${name}`;
              // 发布到 MQTT（去掉 "photo," 前缀）
              this.data.client.publish(this.data.pubTopic, url, {
                qos: 1,
                retain: false
              });
 // 上传成功后清空输入框
 this.setData({
  name: '' // 重置为空白
});
              wx.showToast({
                title: '上传成功并发布',
                icon: 'success',
              });
            },
            fail: (err) => {
              console.error('获取 HTTP 链接失败', err);
              wx.showToast({
                title: '获取链接失败',
                icon: 'none',
              });
            }
          });
        },
        fail: (err) => {
          console.error('上传失败', err);
          wx.showToast({
            title: '上传失败',
            icon: 'none',
          });
        }
      });
    },
    fail: (err) => {
      console.error('选择图片失败', err);
      // wx.showToast({
      //   title: '选择图片失败',
      //   icon: 'none',
      // });
    }
  });
},

  disconnect() {
    if (this.data.client) {
      this.data.client.end();
      this.data.client = null;
      // wx.showToast({
      //   title: '成功断开连接',
      // });
    } else {
      // wx.showToast({
      //   title: '未连接',
      //   icon: 'none',
      // });
    }
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {

  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {
    this.disconnect();
  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {

  }
});
// // pages/face/face.js
// import mqtt from "../../utils/mqtt.min";

// Page({
//   data: {
//     client: null,
//     host: "sc96bd0a.ala.cn-hangzhou.emqxsl.cn",
//     subTopic: "/facerecognition",
//     pubTopic: "/facerecognition",
//     mqttOptions: {
//       username: "lm",
//       password: "12345678",
//       reconnectPeriod: 1000, // 1000毫秒，设置为 0 禁用自动重连
//       connectTimeout: 30 * 1000, // 30秒，连接超时时间
//     },
//   },

//   setValue(key, value) {
//     this.setData({
//       [key]: value,
//     });
//   },

//   uploadFace() {
//     // 连接到 MQTT 服务器
//     this.connect().then(() => {
//       // 订阅主题
//       this.subscribe().then(() => {
//         // 上传照片并发布到 MQTT 主题
//         this.uploadAndPublish();
//       });
//     });
//   },

//   connect() {
//     return new Promise((resolve, reject) => {
//       if (this.data.client) {
//         resolve(true);
//         return;
//       }
//       try {
//         const clientId = new Date().getTime();
//         this.data.client = mqtt.connect(`wxs://${this.data.host}:8084/mqtt`, {
//           ...this.data.mqttOptions,
//           clientId,
//         });

//         this.data.client.on("connect", () => {
//           wx.showToast({
//             title: "连接成功",
//           });
//           resolve(true);
//         });

//         this.data.client.on("error", (error) => {
//           console.error("连接失败", error);
//           wx.showToast({
//             title: '连接失败',
//             icon: 'none',
//           });
//           reject(error);
//         });
//       } catch (error) {
//         console.error("连接失败", error);
//         wx.showToast({
//           title: '连接失败',
//           icon: 'none',
//         });
//         reject(error);
//       }
//     });
//   },

//   subscribe() {
//     return new Promise((resolve, reject) => {
//       if (!this.data.client) {
//         reject(new Error("未连接到 MQTT 服务器"));
//         return;
//       }
//       this.data.client.subscribe(this.data.subTopic, (err) => {
//         if (err) {
//           console.error("订阅失败", err);
//           wx.showToast({
//             title: '订阅失败',
//             icon: 'none',
//           });
//           reject(err);
//         } else {
//           wx.showToast({
//             title: `成功订阅主题：${this.data.subTopic}`,
//           });
//           resolve(true);
//         }
//       });
//     });
//   },

//   uploadAndPublish() {
//     wx.chooseImage({
//       count: 1,
//       sizeType: ['original', 'compressed'],
//       sourceType: ['album', 'camera'],
//       success: (res) => {
//         const tempFilePaths = res.tempFilePaths;
//         const tempFilePath = tempFilePaths[0];

//         // 构造云存储的路径
//         const cloudPath = `uploads/${Date.now()}-${Math.random().toString(36).substr(2, 6)}.jpg`;

//         // 直接上传到云存储，并设置为公有读权限
//         wx.cloud.uploadFile({
//           cloudPath: cloudPath, // 云存储路径
//           filePath: tempFilePath, // 本地临时路径
//           meta: {
//             "public": true // 设置为公有读
//           },
//           success: (uploadRes) => {
//             console.log('上传结果：', uploadRes);
//             if (uploadRes.fileID) {
//               // 获取临时但有效期为 1 天的 URL
//               wx.cloud.getTempFileURL({
//                 fileList: [uploadRes.fileID],
//                 maxAge: 86400, // 设置有效期为 1 天（单位：秒）
//                 success: (res) => {
//                   const fileURL = res.fileList[0].tempFileURL;
//                   console.log('图片临时但有效期为 1 天的 URL：', fileURL);

//                   // 将 URL 包装成 JSON 格式
//                   const message = {
//                     fileURL
//                   };
//                   // const jsonString = JSON.stringify(message);
//                   const URL = `photo,${uploadRes.fileID},wzc`;

//                   // 发布到 MQTT 主题
//                   this.data.client.publish(this.data.pubTopic, URL, {
//                     qos: 1, // 可选：设置 QoS 级别
//                     retain: false // 可选：设置是否保留消息
//                   });

//                   wx.showToast({
//                     title: '上传成功并已发布到 MQTT 主题',
//                     icon: 'success',
//                     duration: 2000
//                   });
//                 },
//                 fail: (err) => {
//                   console.error('获取文件 URL 失败：', err);
//                   wx.showToast({
//                     title: '获取 URL 失败',
//                     icon: 'none',
//                     duration: 2000
//                   });
//                 }
//               });
//             } else {
//               wx.showToast({
//                 title: '上传失败',
//                 icon: 'none',
//                 duration: 2000
//               });
//             }
//           },
//           fail: (err) => {
//             console.error('上传失败：', err);
//             wx.showToast({
//               title: '上传失败',
//               icon: 'none',
//               duration: 2000
//             });
//           }
//         });
//       }
//     });
//   },

//   disconnect() {
//     if (this.data.client) {
//       this.data.client.end();
//       this.data.client = null;
//       wx.showToast({
//         title: '成功断开连接',
//       });
//     } else {
//       wx.showToast({
//         title: '未连接',
//         icon: 'none',
//       });
//     }
//   },

//   /**
//    * 生命周期函数--监听页面加载
//    */
//   onLoad(options) {},

//   /**
//    * 生命周期函数--监听页面初次渲染完成
//    */
//   onReady() {},

//   /**
//    * 生命周期函数--监听页面显示
//    */
//   onShow() {},

//   /**
//    * 生命周期函数--监听页面隐藏
//    */
//   onHide() {},

//   /**
//    * 生命周期函数--监听页面卸载
//    */
//   onUnload() {
//     this.disconnect();
//   },

//   /**
//    * 页面相关事件处理函数--监听用户下拉动作
//    */
//   onPullDownRefresh() {},

//   /**
//    * 页面上拉触底事件的处理函数
//    */
//   onReachBottom() {},

//   /**
//    * 用户点击右上角分享
//    */
//   onShareAppMessage() {}
// });